package com.googlecode.gwt.test;
import com.google.gwt.event.dom.client.*;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Event.NativePreviewEvent;
import com.google.gwt.user.client.Event.NativePreviewHandler;
import com.google.gwt.user.client.ui.*;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitHandler;
import com.google.gwt.user.client.ui.HTMLTable.Cell;
import com.googlecode.gwt.test.utils.events.Browser;
import com.googlecode.gwt.test.utils.events.EventBuilder;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Fail.fail;
import static org.assertj.core.api.Fail.failBecauseExceptionWasNotThrown;
public class BrowserTest extends GwtTestTest {
private Button b;
private Cell clickedCell;
private int keyDownCount;
private int keyUpCount;
private boolean onBlurTriggered;
private boolean onChangeTriggered;
private FocusPanel panel;
private boolean panelTested;
private boolean tested;
@Test
public void addText_delete_SelectedText() {
// Given
TextBox textBox = new TextBox();
// must be attached to use "addText"
RootPanel.get().add(textBox);
textBox.setText("toto titi");
// select "titi"
textBox.setSelectionRange(5, 4);
// Preconditions
assertThat("titi").isEqualTo(textBox.getSelectedText());
// When
Browser.addText(textBox, "tutu");
// Then
assertThat(textBox.getText()).isEqualTo("toto tutu");
assertThat(textBox.getCursorPos()).isEqualTo(9);
}
@Test
public void addText_DoesNot_Fire_ValueChangeEvent() {
// Given
TextBox textBox = new TextBox();
// must be attached to use "addText"
RootPanel.get().add(textBox);
textBox.addValueChangeHandler(new ValueChangeHandler<String>() {
public void onValueChange(ValueChangeEvent<String> event) {
fail("ValueChangeEvent should not be fired with Browser.addText(..)");
}
});
// When
Browser.addText(textBox, "toto");
// Then
assertThat(textBox.getText()).isEqualTo("toto");
}
@Test
public void addText_insertAtCursorPos() {
// Given
TextBox textBox = new TextBox();
// must be attached to use "addText"
RootPanel.get().add(textBox);
textBox.setText("toto");
// Preconditions
assertThat(textBox.getCursorPos()).isEqualTo(4);
// change the position
textBox.setCursorPos(2);
assertThat(textBox.getCursorPos()).isEqualTo(2);
// When
Browser.addText(textBox, "titi");
// Then
assertThat(textBox.getText()).isEqualTo("totitito");
assertThat(textBox.getCursorPos()).isEqualTo(6);
}
@Before
public void beforeBrowserTest() {
panel = new FocusPanel();
RootPanel.get().add(panel);
b = new Button();
panel.add(b);
tested = false;
panelTested = false;
onChangeTriggered = false;
onBlurTriggered = false;
keyDownCount = 0;
keyUpCount = 0;
}
@Test
public void blur() {
// Given
b.addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
tested = !tested;
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
}
});
// When
Browser.blur(b);
// Then
assertThat(tested).as("onBlur event was not triggered").isTrue();
}
@Test
public void click_ComplexPanel() {
// Given
final Anchor a0 = new Anchor();
a0.setText("a0");
final Anchor a1 = new Anchor();
a1.setText("a1");
final StackPanel panel = new StackPanel() {
@Override
public void onBrowserEvent(com.google.gwt.user.client.Event event) {
super.onBrowserEvent(event);
if (DOM.eventGetType(event) == Event.ONCLICK) {
tested = !tested;
assertThat(event.getRelatedEventTarget()).isNull();
}
assertThat(event.getEventTarget()).isEqualTo(a1.getElement());
}
;
};
panel.add(a0);
panel.insert(a1, 1);
// When
Browser.click(panel, 1);
// Then
assertThat(tested).isTrue();
assertThat(panel.getSelectedIndex()).isEqualTo(1);
}
@Test
public void click_firesNativePreviewHandler() {
// Given
Button b = new Button();
FocusPanel focusPanel = new FocusPanel();
focusPanel.add(b);
RootPanel.get().add(focusPanel);
final StringBuilder sb = new StringBuilder();
Event.addNativePreviewHandler(new NativePreviewHandler() {
public void onPreviewNativeEvent(NativePreviewEvent event) {
Event nativeEvent = Event.as(event.getNativeEvent());
int eventType = DOM.eventGetType(nativeEvent);
if (eventType == Event.ONCLICK) {
sb.append("click!");
}
}
});
// When
Browser.click(b);
// Then
assertThat(sb.toString()).isEqualTo("click!");
}
@Test
public void click_Grid() {
// Given
final Grid g = new Grid(2, 2);
final Anchor a = new Anchor();
g.setWidget(1, 1, a);
g.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
clickedCell = g.getCellForEvent(event);
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(a.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
}
});
// When
Browser.click(g, 1, 1);
// Then
assertThat(clickedCell.getRowIndex()).isEqualTo(1);
assertThat(clickedCell.getCellIndex()).isEqualTo(1);
}
@Test
public void click_propagation() {
// Given
b.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
tested = !tested;
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
}
});
panel.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
panelTested = !panelTested;
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
}
});
// When
Browser.click(b);
// Then
assertThat(tested).as("onClick event was not triggered").isTrue();
assertThat(panelTested).as("onClick event was not triggered on target widget parents").isTrue();
}
@Test
public void click_stopPropagation() {
// Given
b.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
tested = !tested;
// stop event propagation : parent clickHandler should not be
// triggered
event.stopPropagation();
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
}
});
panel.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
fail("parent click handler should not be triggered when event.stopPropagation() is called");
}
});
// When
Browser.click(b);
// Then
assertThat(tested).as("onClick event was not triggered").isTrue();
}
@Test
public void click_SuggestBox() {
// Given
MultiWordSuggestOracle oracle = new MultiWordSuggestOracle();
oracle.add("suggestion 1");
oracle.add("suggestion 2");
SuggestBox box = new SuggestBox(oracle);
// When
Browser.fillText(box, "sug");
Browser.click(box, 1);
// Then
assertThat(box.getText()).isEqualTo("suggestion 2");
}
@Test
public void click_WithPosition() {
// Given
b.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
tested = !tested;
// Then
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
// check positions
assertThat(event.getX()).isEqualTo(1);
assertThat(event.getY()).isEqualTo(2);
assertThat(event.getClientX()).isEqualTo(1);
assertThat(event.getClientY()).isEqualTo(2);
assertThat(event.getScreenX()).isEqualTo(3);
assertThat(event.getScreenY()).isEqualTo(4);
}
});
Event clickEvent = EventBuilder.create(Event.ONCLICK).setMouseX(1).setMouseY(2).setMouseScreenX(
3).setMouseScreenY(4).build();
// When
Browser.dispatchEvent(b, clickEvent);
// Then
assertThat(tested).as("onClick event was not triggered").isTrue();
}
@Test
public void emptyText_LongPressFalse() {
// Given
String initialText = "1234";
final TextBox tb = new TextBox();
tb.setText(initialText);
tb.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
onChangeTriggered = true;
}
});
tb.addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
onBlurTriggered = true;
}
});
tb.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
fail("no keyPress event should be triggered when pressing backspace button");
}
});
tb.addKeyUpHandler(new KeyUpHandler() {
public void onKeyUp(KeyUpEvent event) {
assertThat(event.getNativeKeyCode()).isEqualTo(KeyCodes.KEY_BACKSPACE);
keyUpCount++;
}
});
tb.addKeyDownHandler(new KeyDownHandler() {
public void onKeyDown(KeyDownEvent event) {
assertThat(event.getNativeKeyCode()).isEqualTo(KeyCodes.KEY_BACKSPACE);
keyDownCount++;
}
});
// When
Browser.emptyText(tb, false);
// Then
// the textbox value should be updated
assertThat(tb.getText()).isEqualTo("");
assertThat(keyDownCount).isEqualTo(4);
assertThat(keyUpCount).isEqualTo(4);
assertThat(onBlurTriggered).isTrue();
assertThat(onChangeTriggered).isTrue();
}
@Test
public void emptyText_LongPressTrue() {
// Given
String initialText = "1234";
final TextBox tb = new TextBox();
tb.setText(initialText);
tb.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
onChangeTriggered = true;
}
});
tb.addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
onBlurTriggered = true;
}
});
tb.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
fail("no keyPress event should be triggered when pressing backspace button");
}
});
tb.addKeyUpHandler(new KeyUpHandler() {
public void onKeyUp(KeyUpEvent event) {
assertThat(event.getNativeKeyCode()).isEqualTo(KeyCodes.KEY_BACKSPACE);
keyUpCount++;
}
});
tb.addKeyDownHandler(new KeyDownHandler() {
public void onKeyDown(KeyDownEvent event) {
assertThat(event.getNativeKeyCode()).isEqualTo(KeyCodes.KEY_BACKSPACE);
keyDownCount++;
}
});
// When
Browser.emptyText(tb, true);
// Then
// the textbox value should be updated
assertThat(tb.getText()).isEqualTo("");
assertThat(keyDownCount).isEqualTo(4);
assertThat(keyUpCount).isEqualTo(1);
assertThat(onBlurTriggered).isTrue();
assertThat(onChangeTriggered).isTrue();
}
@Test
public void emptyText_LongPressTrue_Does_Not_Update_When_KeyDown_PreventDefault() {
// Given
String initialText = "1234";
final TextBox tb = new TextBox();
tb.setText(initialText);
tb.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
onChangeTriggered = true;
}
});
tb.addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
onBlurTriggered = true;
}
});
tb.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
fail("no keyPress event should be triggered when pressing backspace button");
}
});
tb.addKeyUpHandler(new KeyUpHandler() {
public void onKeyUp(KeyUpEvent event) {
assertThat(event.getNativeKeyCode()).isEqualTo(KeyCodes.KEY_BACKSPACE);
keyUpCount++;
}
});
tb.addKeyDownHandler(new KeyDownHandler() {
public void onKeyDown(KeyDownEvent event) {
assertThat(event.getNativeKeyCode()).isEqualTo(KeyCodes.KEY_BACKSPACE);
keyDownCount++;
event.preventDefault();
}
});
// When
Browser.emptyText(tb, true);
// Then
// the textbox value should not be updated
assertThat(tb.getText()).isEqualTo("1234");
assertThat(keyDownCount).isEqualTo(4);
assertThat(keyUpCount).isEqualTo(1);
assertThat(onBlurTriggered).isTrue();
assertThat(onChangeTriggered).isFalse();
}
@Test
public void fillText() {
// Given
String textToFill = "some text";
final List<Character> keyUpChars = new ArrayList<Character>();
final List<Character> keyDownChars = new ArrayList<Character>();
final List<Character> keyPressChars = new ArrayList<Character>();
final TextBox tb = new TextBox();
tb.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
onChangeTriggered = true;
}
});
tb.addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
onBlurTriggered = true;
}
});
tb.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
// Then that onKeyPress is triggered before onKeyUp and after
// onKeyDown
assertThat(keyUpChars.size()).isEqualTo(keyPressChars.size());
assertThat(keyDownChars.size()).isEqualTo(keyPressChars.size() + 1);
keyPressChars.add(event.getCharCode());
}
});
tb.addKeyUpHandler(new KeyUpHandler() {
public void onKeyUp(KeyUpEvent event) {
// Then that onKeyUp is triggered after onKeyDown and onKeyPress
assertThat(keyDownChars.size()).isEqualTo(keyUpChars.size() + 1);
assertThat(keyPressChars.size()).isEqualTo(keyUpChars.size() + 1);
keyUpChars.add((char) event.getNativeKeyCode());
}
});
tb.addKeyDownHandler(new KeyDownHandler() {
public void onKeyDown(KeyDownEvent event) {
// Then that onKeyDown is triggered before onKeyPress and onKeyUp
assertThat(keyPressChars.size()).isEqualTo(keyDownChars.size());
assertThat(keyUpChars.size()).isEqualTo(keyDownChars.size());
keyDownChars.add((char) event.getNativeKeyCode());
}
});
// When
Browser.fillText(tb, textToFill);
// Then
assertThat(tb.getText()).isEqualTo(textToFill);
assertThat(tb.getValue()).isEqualTo(textToFill);
assertTextFilledCorrectly(textToFill, keyDownChars);
assertTextFilledCorrectly(textToFill, keyPressChars);
assertTextFilledCorrectly(textToFill, keyUpChars);
assertThat(onBlurTriggered).isTrue();
assertThat(onChangeTriggered).isTrue();
assertThat(tb.getCursorPos()).isEqualTo(textToFill.length());
}
@Test
public void fillText_Does_Not_Update_When_KeyDown_PreventDefault() {
// Given
String initialText = "intial text";
String textToFill = "some text which will not be filled";
final List<Character> keyUpChars = new ArrayList<Character>();
final List<Character> keyDownChars = new ArrayList<Character>();
final List<Character> keyPressChars = new ArrayList<Character>();
final TextBox tb = new TextBox();
tb.setText(initialText);
tb.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
onChangeTriggered = true;
}
});
tb.addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
onBlurTriggered = true;
}
});
tb.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
// Then that onKeyPress is triggered before onKeyUp and after
// onKeyDown
assertThat(keyUpChars.size()).isEqualTo(keyPressChars.size());
assertThat(keyDownChars.size()).isEqualTo(keyPressChars.size() + 1);
keyPressChars.add(event.getCharCode());
}
});
tb.addKeyUpHandler(new KeyUpHandler() {
public void onKeyUp(KeyUpEvent event) {
// Then that onKeyUp is triggered after onKeyDown and onKeyPress
assertThat(keyDownChars.size()).isEqualTo(keyUpChars.size() + 1);
assertThat(keyPressChars.size()).isEqualTo(keyUpChars.size() + 1);
keyUpChars.add((char) event.getNativeKeyCode());
}
});
tb.addKeyDownHandler(new KeyDownHandler() {
public void onKeyDown(KeyDownEvent event) {
// Then that onKeyDown is triggered before onKeyPress and onKeyUp
assertThat(keyPressChars.size()).isEqualTo(keyDownChars.size());
assertThat(keyUpChars.size()).isEqualTo(keyDownChars.size());
keyDownChars.add((char) event.getNativeKeyCode());
// prevent the keydown event : the textbox value should not be
// updated
event.preventDefault();
}
});
// When
Browser.fillText(tb, textToFill);
// Then
// the textbox value should not be updated
assertThat(tb.getText()).isEqualTo(initialText);
assertThat(tb.getValue()).isEqualTo(initialText);
assertThat(onChangeTriggered).isFalse();
assertTextFilledCorrectly(textToFill, keyDownChars);
assertTextFilledCorrectly(textToFill, keyPressChars);
assertTextFilledCorrectly(textToFill, keyUpChars);
assertThat(onBlurTriggered).isTrue();
assertThat(tb.getCursorPos()).isEqualTo(0);
}
@Test
public void fillText_Does_Not_Update_When_KeyPress_PreventDefault() {
// Given
String initialText = "intial text";
String textToFill = "some text which will not be filled";
final List<Character> keyUpChars = new ArrayList<Character>();
final List<Character> keyDownChars = new ArrayList<Character>();
final List<Character> keyPressChars = new ArrayList<Character>();
final TextBox tb = new TextBox();
tb.setText(initialText);
tb.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
onChangeTriggered = true;
}
});
tb.addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
onBlurTriggered = true;
}
});
tb.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
// Then that onKeyPress is triggered before onKeyUp and after
// onKeyDown
assertThat(keyUpChars.size()).isEqualTo(keyPressChars.size());
assertThat(keyDownChars.size()).isEqualTo(keyPressChars.size() + 1);
keyPressChars.add(event.getCharCode());
// prevent the keyPress event : the textbox value should not be
// updated
event.preventDefault();
}
});
tb.addKeyUpHandler(new KeyUpHandler() {
public void onKeyUp(KeyUpEvent event) {
// Then that onKeyUp is triggered after onKeyDown and onKeyPress
assertThat(keyDownChars.size()).isEqualTo(keyUpChars.size() + 1);
assertThat(keyPressChars.size()).isEqualTo(keyUpChars.size() + 1);
keyUpChars.add((char) event.getNativeKeyCode());
}
});
tb.addKeyDownHandler(new KeyDownHandler() {
public void onKeyDown(KeyDownEvent event) {
// Then that onKeyDown is triggered before onKeyPress and onKeyUp
assertThat(keyPressChars.size()).isEqualTo(keyDownChars.size());
assertThat(keyUpChars.size()).isEqualTo(keyDownChars.size());
keyDownChars.add((char) event.getNativeKeyCode());
}
});
// When
Browser.fillText(tb, textToFill);
// Then
// the textbox value should not be updated
assertThat(tb.getText()).isEqualTo(initialText);
assertThat(tb.getValue()).isEqualTo(initialText);
assertThat(onChangeTriggered).isFalse();
assertTextFilledCorrectly(textToFill, keyDownChars);
assertTextFilledCorrectly(textToFill, keyPressChars);
assertTextFilledCorrectly(textToFill, keyUpChars);
assertThat(onBlurTriggered).isTrue();
assertThat(tb.getCursorPos()).isEqualTo(0);
}
@Test
public void fillText_EmptyShouldThrowsAnError() {
// Given
final TextBox tb = new TextBox();
tb.setText("test");
// When
try {
Browser.fillText("", tb);
failBecauseExceptionWasNotThrown(IllegalArgumentException.class);
} catch (Exception e) {
assertThat(e.getClass()).isEqualTo(IllegalArgumentException.class);
assertThat(e).hasMessage("Cannot fill a null or empty text. If you intent to remove some text, use 'Browser.emptyText(..)' instead");
}
}
@Test
public void fillText_NullShouldThrowsAnError() {
// Given
final TextBox tb = new TextBox();
tb.setText("test");
// When
try {
Browser.fillText(null, tb);
failBecauseExceptionWasNotThrown(IllegalArgumentException.class);
} catch (Exception e) {
assertThat(e.getClass()).isEqualTo(IllegalArgumentException.class);
assertThat(e).hasMessage("Cannot fill a null or empty text. If you intent to remove some text, use 'Browser.emptyText(..)' instead");
}
}
@Test
public void fillText_Still_Update_When_KeyUp_PreventDefault() {
// Given
String initialText = "intial text";
String textToFill = "some text which will not be filled";
final List<Character> keyUpChars = new ArrayList<Character>();
final List<Character> keyDownChars = new ArrayList<Character>();
final List<Character> keyPressChars = new ArrayList<Character>();
final TextBox tb = new TextBox();
tb.setText(initialText);
tb.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
onChangeTriggered = true;
}
});
tb.addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
onBlurTriggered = true;
}
});
tb.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
// Then that onKeyPress is triggered before onKeyUp and after
// onKeyDown
assertThat(keyUpChars.size()).isEqualTo(keyPressChars.size());
assertThat(keyDownChars.size()).isEqualTo(keyPressChars.size() + 1);
keyPressChars.add(event.getCharCode());
}
});
tb.addKeyUpHandler(new KeyUpHandler() {
public void onKeyUp(KeyUpEvent event) {
// Then that onKeyUp is triggered after onKeyDown and onKeyPress
assertThat(keyDownChars.size()).isEqualTo(keyUpChars.size() + 1);
assertThat(keyPressChars.size()).isEqualTo(keyUpChars.size() + 1);
keyUpChars.add((char) event.getNativeKeyCode());
// prevent the keyUp event : the textbox value should be updated
event.preventDefault();
}
});
tb.addKeyDownHandler(new KeyDownHandler() {
public void onKeyDown(KeyDownEvent event) {
// Then that onKeyDown is triggered before onKeyPress and onKeyUp
assertThat(keyPressChars.size()).isEqualTo(keyDownChars.size());
assertThat(keyUpChars.size()).isEqualTo(keyDownChars.size());
keyDownChars.add((char) event.getNativeKeyCode());
}
});
// When
Browser.fillText(tb, textToFill);
// Then
// the textbox value should be updated
assertThat(tb.getText()).isEqualTo(textToFill);
assertThat(tb.getValue()).isEqualTo(textToFill);
assertThat(onChangeTriggered).isTrue();
assertTextFilledCorrectly(textToFill, keyDownChars);
assertTextFilledCorrectly(textToFill, keyPressChars);
assertTextFilledCorrectly(textToFill, keyUpChars);
assertThat(onBlurTriggered).isTrue();
}
@Test
public void focus() {
// Given
b.addFocusHandler(new FocusHandler() {
public void onFocus(FocusEvent event) {
tested = !tested;
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
}
});
// When
Browser.focus(b);
// Then
assertThat(tested).as("onFocus event was not triggered").isTrue();
}
@Test
public void keyDown() {
// Given
b.addKeyDownHandler(new KeyDownHandler() {
public void onKeyDown(KeyDownEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
tested = !tested;
}
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
}
});
// When 1
Browser.keyDown(b, KeyCodes.KEY_ESCAPE);
// Then 1
assertThat(tested).as("onKeyDown event should not be triggered").isFalse();
// When 2
Browser.keyDown(b, KeyCodes.KEY_ENTER);
// Then 2
assertThat(tested).as("onKeyDown event was not triggered").isTrue();
}
@Test
public void keyPress() {
// Given
b.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
tested = !tested;
}
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
}
});
// When 1
Browser.keyDown(b, KeyCodes.KEY_ESCAPE);
// Then 1
assertThat(tested).as("onKeyPress event should not be triggered").isFalse();
// When 2
Browser.keyPress(b, KeyCodes.KEY_ENTER);
// Then 2
assertThat(tested).as("onKeyPress event was not triggered").isTrue();
}
@Test
public void keyUp() {
// Given
b.addKeyUpHandler(new KeyUpHandler() {
public void onKeyUp(KeyUpEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
tested = !tested;
}
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
}
});
// When 1
Browser.keyDown(b, KeyCodes.KEY_ESCAPE);
// Then 1
assertThat(tested).as("onKeyUp event should not be triggered").isFalse();
// When 2
Browser.keyUp(b, KeyCodes.KEY_ENTER);
// Then 2
assertThat(tested).as("onKeyUp event was not triggered").isTrue();
}
@Test
public void mouseDown() {
// Given
b.addMouseDownHandler(new MouseDownHandler() {
public void onMouseDown(MouseDownEvent event) {
tested = !tested;
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
}
});
// When
Browser.mouseDown(b);
// Then
assertThat(tested).as("onMouseDown event was not triggered").isTrue();
}
@Test
public void mouseMove() {
// Given
b.addMouseMoveHandler(new MouseMoveHandler() {
public void onMouseMove(MouseMoveEvent event) {
tested = !tested;
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
}
});
// When
Browser.mouseMove(b);
// Then
assertThat(tested).as("onMouseMove event was not triggered").isTrue();
}
@Test
public void mouseOut() {
// Given
b.addMouseOutHandler(new MouseOutHandler() {
public void onMouseOut(MouseOutEvent event) {
tested = !tested;
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isEqualTo(b.getParent().getElement());
}
});
// When
Browser.mouseOut(b);
// Then
assertThat(tested).as("onMouseOut event was not triggered").isTrue();
}
@Test
public void mouseOver() {
// Given
b.addMouseOverHandler(new MouseOverHandler() {
public void onMouseOver(MouseOverEvent event) {
tested = !tested;
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isEqualTo(b.getParent().getElement());
}
});
// When
Browser.mouseOver(b);
// Then
assertThat(tested).as("onMouseOver event was not triggered").isTrue();
}
@Test
public void mouseUp() {
// Given
b.addMouseUpHandler(new MouseUpHandler() {
public void onMouseUp(MouseUpEvent event) {
tested = !tested;
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
}
});
// When
Browser.mouseUp(b);
// Then
assertThat(tested).as("onMouseUp event was not triggered").isTrue();
}
@Test
public void mouseWheel() {
// Given
b.addMouseWheelHandler(new MouseWheelHandler() {
public void onMouseWheel(MouseWheelEvent event) {
tested = !tested;
assertThat(event.getNativeEvent().getEventTarget()).isEqualTo(b.getElement());
assertThat(event.getNativeEvent().getRelatedEventTarget()).isNull();
}
});
// When
Browser.mouseWheel(b);
// Then
assertThat(tested).as("onMouseWheel event was not triggered").isTrue();
}
@Test
public void removeText() {
// Given
onChangeTriggered = false;
onBlurTriggered = false;
keyDownCount = 0;
keyUpCount = 0;
String initialText = "1234";
final TextBox tb = new TextBox();
tb.setText(initialText);
tb.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
onChangeTriggered = true;
}
});
tb.addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
onBlurTriggered = true;
}
});
tb.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
fail("no keyPress event should be triggered when pressing backspace button");
}
});
tb.addKeyUpHandler(new KeyUpHandler() {
public void onKeyUp(KeyUpEvent event) {
assertThat(event.getNativeKeyCode()).isEqualTo(KeyCodes.KEY_BACKSPACE);
keyUpCount++;
}
});
tb.addKeyDownHandler(new KeyDownHandler() {
public void onKeyDown(KeyDownEvent event) {
assertThat(event.getNativeKeyCode()).isEqualTo(KeyCodes.KEY_BACKSPACE);
keyDownCount++;
}
});
// When
Browser.removeText(tb, 2);
// Then
// the textbox value should be updated
assertThat(tb.getText()).isEqualTo("12");
assertThat(keyDownCount).isEqualTo(2);
assertThat(keyUpCount).isEqualTo(2);
assertThat(onBlurTriggered).isTrue();
assertThat(onChangeTriggered).isTrue();
}
@Test
public void removeText_Does_Not_Update_When_KeyDown_PreventDefault() {
// Given
onChangeTriggered = false;
onBlurTriggered = false;
keyDownCount = 0;
keyUpCount = 0;
String initialText = "1234";
final TextBox tb = new TextBox();
tb.setText(initialText);
tb.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
onChangeTriggered = true;
}
});
tb.addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
onBlurTriggered = true;
}
});
tb.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
fail("no keyPress event should be triggered when pressing backspace button");
}
});
tb.addKeyUpHandler(new KeyUpHandler() {
public void onKeyUp(KeyUpEvent event) {
assertThat(event.getNativeKeyCode()).isEqualTo(KeyCodes.KEY_BACKSPACE);
keyUpCount++;
}
});
tb.addKeyDownHandler(new KeyDownHandler() {
public void onKeyDown(KeyDownEvent event) {
assertThat(event.getNativeKeyCode()).isEqualTo(KeyCodes.KEY_BACKSPACE);
keyDownCount++;
event.preventDefault();
}
});
// When
Browser.removeText(tb, 2);
// Then
// the textbox value should be updated
assertThat(tb.getText()).isEqualTo("1234");
assertThat(keyDownCount).isEqualTo(2);
assertThat(keyUpCount).isEqualTo(2);
assertThat(onBlurTriggered).isTrue();
assertThat(onChangeTriggered).isFalse();
}
@Test()
public void submit() {
// Given
final StringBuilder sb = new StringBuilder();
FormPanel form = new FormPanel();
form.addSubmitHandler(new SubmitHandler() {
public void onSubmit(SubmitEvent event) {
sb.append("onSubmit");
}
});
form.addSubmitCompleteHandler(new SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event) {
sb.append(" complete : ").append(event.getResults());
}
});
// Attach to the DOM
RootPanel.get().add(form);
// Given
Browser.submit(form, "mock result");
// Then
assertThat(sb.toString()).isEqualTo("onSubmit complete : mock result");
}
@Test(expected = AssertionError.class)
public void submitThrowsErrorIfNotAttached() {
// Given
final StringBuilder sb = new StringBuilder();
FormPanel form = new FormPanel();
form.addSubmitHandler(new SubmitHandler() {
public void onSubmit(SubmitEvent event) {
sb.append("onSubmit");
}
});
form.addSubmitCompleteHandler(new SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event) {
sb.append(" complete : ").append(event.getResults());
}
});
// When
Browser.submit(form, "mock result");
}
private void assertTextFilledCorrectly(String filledText, List<Character> typedChars) {
assertThat(typedChars.size()).isEqualTo(filledText.length());
for (int i = 0; i < filledText.length(); i++) {
assertThat(typedChars.get(i)).isEqualTo((Object) filledText.charAt(i));
}
}
}